#include <stdio.h>
#include <limits.h>

int main(){
    //整数赋值给浮点数变量的时候,会自动转化为浮点数
    float  y = 12 * 2;
    printf("%.2f\n" , y);

    //char类型与int类型运行,会自动提升为int
    char c = 10;
    int i = 10;
    int j = c + i;
    printf("%d\n" , j);

    short s1 = 10;
    //自动向上转型 转化为Int
    int num1 = s1;
    //自动向上转型 转化为double
    double num2 = s1;
    printf("%d\n" , num1);
    printf("%f\n" , num2);

    int x = 10;
    double d1 = 12.3;
    //系统自动的将x的类型由int转化为double类型,故i+d1的结果为double类型
    double d2 = x + d1;
    printf("%f\n" , d2);

    double d;
    d = 2 + 'A' + 1.5F;
    printf("%f\n" , d);

    char c1 = 10;
    short c2 = 10;
    //char + short = int
    int c3 = c1 + c2;
    printf("%d\n" ,c3);



    double pi = 3.1415926;
    int pa = pi;
    //向下转型的时候会有精度损失， 所以一般不推荐
    printf("%d\n" , pa);


    int v = 3.14;
    //int 接小数，直接会把小数部分丢弃掉
    printf("%d\n" , v);

    int cost = 12.99;

    printf("%d\n" , cost);
    //会直接将double类型转化为float类型  最多保留六位小数 并且 四舍五入
    float po = 3.1415926536;
    printf("%f\n" , po);


    float f3 = 1.1f;
    double f4 = 1.58667435;
    //由于存在精度限制,浮点数只是一个近似值，是不准确的
    //更加说明一点,这个世界上没有完美的事情 所以  不要追求完美  80分就够
    f3 = f4;
    printf("%.8f\n" , f3 );

    float e = 3.14159;
    printf("%f\n" , e );

    double r = 12.3;
    int r1 = 10;
    int z = (int) r + r1;
    printf("%d\n" , z );


    float r3 , r4;
    r3 = (int)1.2+3.4;//4.4
    r4 = (int)(1.2 + 3.4);//4.0
    printf("r3 = %f , r4 = %f\n" , r3 , r4);

    //得到的答案完全不是我想要的
    int t1 = 40000;
    short t2 = (short) t1;
    printf("%d\n" , t2);

    //将10显示的转化为long类型,这里的显示转化其实是没有必要的,因为可以自动转化
    long s = (long)10 +12;
    printf("%d\n" , s);

    unsigned char u = 255;
    u = u + 1;
    printf("%d\n" , u);

    //尽量选择合适的数据类型保存需要的值 ， 避免溢出
    unsigned int ui = UINT_MAX;
    ui++;
    printf("ui = %u\n" , ui);
    ui--;
    printf("ui = %u\n" , ui);






}
